﻿#define _CRT_SECURE_NO_WARNINGS 1
//练习1
//#include<stdio.h>
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//int main()
//{
//	printf("%zd\n", sizeof(struct S1));
//	return 0;
//}

//练习2
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//};
//int main()
//{
//	printf("%zd\n", sizeof(struct S2));
//	return 0;
//}

//练习3
//struct S3
//{
//	double d;
//	char c;
//	int i;
//};
////int main()
////{
////	printf("%zd\n", sizeof(struct S3));
////	return 0;
////}
//
////练习4-结构体嵌套问题
//struct S4
//{
//	char c1;
//	struct S3 s3;
//	double d;
//};
//int main()
//{
//	printf("%zd\n", sizeof(struct S4));
//	return 0;
//}


//#include <stdio.h>
//#pragma pack(1)//设置默认对⻬数为1
//struct S
//{
//	char c1;  // 1 1 1
//	int i;  // 4 1 1 
//	char c2; // 1 1 1
//};
//#pragma pack()//取消设置的对⻬数，还原为默认
//int main()
//{
//	//输出的结果是什么？
//	printf("%zd\n", sizeof(struct S));
//	return 0;
//}

#include<stdio.h>
//struct S
//{
//	int data[1000];
//	int num;
//};
//struct S s = { {1,2,3,4},1000 };
////结构体传参
//void Print1(struct S s)
//{
//	printf("%d\n", s.num);
//}
//void Print2(struct S* ps)
//{
//	printf("%d\n", ps->num);
//}
//int main()
//{
//	Print1(s);
//	Print2(&s);
//	return 0;
//}
//struct A
//{
//	int _a : 2;
//	int _b : 5;
//	int _c : 10;
//	int _d : 30;
//};
//int main()
//{
//	printf("%zd", sizeof(struct A));
//	return 0;
//}

//struct S
//{
//	char a : 3;
//	char b : 4;
//	char c : 5;
//	char d : 4;
//};
//int main()
//{
//	struct S s = { 0 };
//	s.a = 10;
//	s.b = 12;
//	s.c = 3;
//	s.d = 4;
//	return 0;
//	/// 0110 0010 0000 0011 0000 0100
//	/// 62 03 04
//}
////空间是如何开辟的？
//
//

//struct A
//{
//	int _a : 2;
//	int _b : 5;
//	int _c : 10;
//	int _d : 30;
//};
//int main()
//{
//	struct A sa = { 0 };
//	//scanf("%d", &sa._b);//这是错误的
//
//	//正确的⽰范
//	int b = 0;
//	scanf("%zd", &b);
//	sa._b = b;
//	return 0;
//}
//
//union UN
//{
//	char c;
//	int i;
//};
//int main()
//{
//	union UN u = { 0 };
//	printf("%zd", sizeof(union UN));
//	return 0;
//}

//代码1
//联合类型的声明
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	// 下⾯输出的结果是⼀样的吗？
//	printf("%p\n", &(un.i));
//	printf("%p\n", &(un.c));
//	printf("%p\n", &un);
//	return 0;
//}

//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	// 下⾯输出的结果是⼀样的吗？
//	
//	un.i = 0x11223344;
//	un.c = 0x55;
//	return 0;
//}


//union Un
//{
//	char c[5];
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	// 下⾯输出的结果是⼀样的吗？
//	printf("%zd", sizeof(un));
//	return 0;
//}
//int check_sys()
//{
//	int i = 1;
//	return *(char*)&i;
//}

//int check_sys()
//{
//	union un
//	{
//		char i;
//		int m;
//	}s;
//	s.m = 1;
//	return s.i;
//}
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//	return 0;
//}